package poo.exo5;

import java.util.ArrayList;
import java.util.List;

public class Bibliotheque
{
	private List<Abonne> listeAbonne;
	private List<Ouvrage> listeOuvrage;

	public Bibliotheque()
	{
		this.listeAbonne = new ArrayList<Abonne>();
		this.listeOuvrage = new ArrayList<Ouvrage>();
	}

	public void ajouterOuvrage(Ouvrage ouvr)
	{
		this.listeOuvrage.add(ouvr);
	}

	public void ajouterAbonne(Abonne abonn)
	{
		this.listeAbonne.add(abonn);
	}

	public void emprunter(Abonne abonn, Ouvrage ouvr)throws ExceptionBiblio
	{
		//Verifier que les argument ne sont pas nuls
		
		if(ouvr==null) 
		{
			throw new ExceptionBiblio ("Cet ouvrage n'existe pas !");
		}
		if (abonn == null)
		{
			throw new ExceptionBiblio ("Cet abonné n'existe pas !");
		}
		
		//Verifier la disponibilité de l'ouvrage
		if (ouvr.isDisponible() && !ouvr.isReserve()) //OK -> affectation
		{
			ouvr.setDisponible(false);
			ouvr.setEmprunteur(abonn);
			abonn.getListeEmprunt().add(ouvr);
			System.out.println(abonn.getNom()+" a empreunté "+ ouvr.getTitre());
		} else// KO -> lever Exception
		{
			throw new ExceptionBiblio ("Ouvrage indisponible ou reservé...");
		}
	}

	public void reserver(Abonne abonn, Ouvrage ouvr)throws ExceptionBiblio
	{

		if (!ouvr.isReserve())
		{
			ouvr.setReserve(true);
			ouvr.setEmprunteur(abonn);
			abonn.getListeReservation().add(ouvr);
			System.out.println(abonn.getNom()+" reserve "+ ouvr.getTitre());
		} else
		{
			throw new ExceptionBiblio ("Ouvrage déjà reservé...");
		}
	}

	public void restituer(Abonne abonn, Ouvrage ouvr)throws ExceptionBiblio
	{

		if (ouvr.getEmprunteur() != abonn)
		{
			throw new ExceptionBiblio ("Cet abonné n'a pas reservé cet ouvrage.");
		}

		if (!ouvr.isDisponible())
		{
			ouvr.setDisponible(true);
			abonn.getListeEmprunt().remove(ouvr);
		}
		if (!ouvr.isReserve())
		{
			ouvr.setReserve(false);
			abonn.getListeReservation().remove(ouvr);
		}
		else
		{
			
		}
		ouvr.setEmprunteur(null);
		System.out.println("Ouvrage: " + ouvr + "\nrestitué");
	}
}